package clases;

import interfaz.*;
import java.awt.Component;
import javax.swing.AbstractCellEditor;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;

public class ClsCellEditorPartida extends AbstractCellEditor implements TableCellEditor {

    //private ClsDatabase bd = new ClsDatabase();
    private ClsDatabase db;
    private String viejo_Value = ""; //Valor antiguo de la celda
    private String nuevo_Value = ""; //valor nuevo de la celda
    private int NameColum = 1;//nombre de la columna
    private String ID = "";// Llave del registro
    String tipo_insumo = "1";
    String sub_categoria = "1";
    int fila = 0;
    JTable table2;
    private JComponent component;
    private JComponent component_txt = new JTextField();
    private JComponent component_lbl = new JLabel();
    ClsContraladorEventos controlEvent = new ClsContraladorEventos();
    private ClsMetodos metodos = new ClsMetodos();
    private dlgPartidas dlgPartidas;
    boolean es_label;

    public ClsCellEditorPartida(ClsDatabase db, int NameColumn, dlgPartidas dlg) {
        this.db = db;
        this.NameColum = NameColumn;
        dlgPartidas = dlg;
    }

    public Object getCellEditorValue() {
        return ((JTextField) component_txt).getText();
    }

    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
        tipo_insumo = table.getValueAt(row, 9).toString();
        sub_categoria = table.getValueAt(row, 10).toString();

        boolean v = false;
        //System.out.println(tipo_insumo + " " + sub_categoria);
        if (NameColum == 1) {
            //cuadrilla
            if (tipo_insumo.equals("2") || (tipo_insumo.equals("3") && sub_categoria.equals("2"))) {
                v = true;
            } else {
                v = false;
            }
        } else if (NameColum == 2) {
            //System.out.println("entro: "+v);
            if (tipo_insumo.equals("2") || (tipo_insumo.equals("3") && sub_categoria.equals("2"))) {
                v = false;
            } else {
                v = true;
            }
        } else {
            v = false;
        }

        if (v == true) {
            table2 = table;
            fila = row;
            viejo_Value = value.toString();//Toma valor de celda antes de cualquier modificación
            ID = table.getValueAt(row, 0).toString();//obtiene el ID unico del registro
            ((JTextField) component_txt).setEditable(true);
            ((JTextField) component_txt).setBackground(new java.awt.Color(225, 235, 247));
            ((JTextField) component_txt).setHorizontalAlignment(javax.swing.JTextField.RIGHT);
            ((JTextField) component_txt).setMargin(new java.awt.Insets(0, 2, 0, 2));
            ((JTextField) component_txt).addKeyListener(new java.awt.event.KeyAdapter() {
                public void keyTyped(java.awt.event.KeyEvent evt) {
                    controlEvent.soloNumerosDecimales(evt, ((JTextField) component_txt), 2);
                }
            });
            ((JTextField) component_txt).addFocusListener(new java.awt.event.FocusAdapter() {
                public void focusLost(java.awt.event.FocusEvent evt) {
                    table2.editCellAt(-1, -1);
                    //dlgPartidas.nuevo_calculo();
                    //dlg_presupuesto_prototipo.sumar_totales();
                }
            });
            ((JTextField) component_txt).setText(value.toString());//coloca valor de la celda al JTextField
            component = component_txt;
            es_label = false;
        } else {
            //Label

            //((JLabel) component).setText("");
            //((JTextField) component_lbl).setEditable(true);
            ((JLabel) component_lbl).setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
            //((JLabel) component_lbl).setText(value.toString());
            ((JLabel) component_lbl).setOpaque(true);
            ((JLabel) component_lbl).setBackground(new java.awt.Color(57, 105, 138));
            component = component_lbl;
            viejo_Value = value.toString();
            es_label = true;
        }
        return component;
    }

    @Override
    public boolean stopCellEditing() {
        if (es_label) {
            nuevo_Value = ((JLabel) component_lbl).getText();//Captura nuevo valor de la celda
        } else {
            nuevo_Value = ((JTextField) component_txt).getText();
        }//Captura nuevo valor de la celda  


        //Compara valores, si no son iguales, debe actualizar registro
//        if (tipo_insumo.equals("0")) {
        if (!nuevo_Value.equals(viejo_Value)) {   //Realiza la actualizacion
//                dlg_presupuesto_prototipo dialog = new dlg_presupuesto_prototipo(new javax.swing.JFrame(), true);
//                    DefaultTableModel modeloTabla = (DefaultTableModel) table2.getModel();
//
//                    double cantida = Double.parseDouble(nuevo_Value);
//                    double precio = Double.parseDouble(modeloTabla.getValueAt(fila, 5).toString());
//
//                    double total = Double.parseDouble(nuevo_Value) * Double.parseDouble(modeloTabla.getValueAt(fila, 5).toString());
//                    System.out.println(cantida + "-- " + precio + "  -- " + total + "   --- " + metodos.redondeo_1(total));
//                    modeloTabla.setValueAt(metodos.redondeo_1(total), fila, 6);
        } else {
            if (es_label) {
                ((JLabel) component_lbl).setText(viejo_Value);
                component = component_lbl;
            } else {
                ((JTextField) component_txt).setText(viejo_Value);
                component = component_txt;
            }
        }
 

    return super.stopCellEditing();
}
}
